package config.java;

import java.util.Hashtable;

/**
 * 本类保存读出来的配置数据<br>
 * 不管有多少配置文件，其数据都在本类中保存。
 * 在本类中保存的方式如下：每个配置文件以一个Hashtable的形式保存，其中KEY为配置文件的KEY，VALUE为配置文件的VALUE.
 * 如果有多个配置文件，在本类中以hashtable的形式保存，其中KEY为配置文件的别名，VALUE为配置文件的hashtable。
 * @author liao
 *
 */
public class ConfigValue {

	/**
	 * 配置文件数据
	 */
	private static Hashtable<String,Hashtable<String,String>> value = new Hashtable<String,Hashtable<String,String>>();
	
	private static Hashtable<String,ConfigBin> conf = new Hashtable<String,ConfigBin>();
	
	private static ConfigValue instance = new ConfigValue();
	
	
	
	private ConfigValue(){}
	
	public static ConfigValue getInstance(){
		return instance;
	}
	
	/**
	 * 设置一个配置文件数据
	 * @param alias 配置文件别名
	 * @param v 配置文件数据
	 */
	public void setConfigValue(String alias,Hashtable<String,String> v){
		value.put(alias, v);
	}
	
	/**
	 * 取一个配置文件中某个KEY的值
	 * @param alias 配置文件别名
	 * @param key 配置文件的KEY
	 * @return 如果有此配置文件，返回此配置文件指定KEY的值，否则返回null
	 */
	public String getValue(String alias,String key){
		Hashtable<String,String> v = value.get(alias);
		if(v == null)
			return null;
		return v.get(key);
	}
	
	/**
	 * 取一个配置文件中某个KEY的值，如果这个值为null，则返回默认值
	 * @param alias 配置文件别名
	 * @param key 配置文件的KEY
	 * @param def 默认值
	 * @return 当有这个配置文件，且这个配置文件的KEY值不为null，返回这个KEY的值，否则返回默认值。
	 *         当没有这个配置文件，或者有这个配置文件但在配置文件中没有这个KEY，会返回默认值。
	 */
	public String getValue(String alias,String key,String def){
		String v = getValue(alias,key);
		if(v != null)
			return v;
		else
			return def;
	}
	
	public void setConf(ConfigBin confv){
		if(confv != null)
		conf.put(confv.getAlias(), confv);
	}
	
	public Hashtable<String,ConfigBin> getConf(){
		return conf;
	}
	
	public ConfigBin getConfBin(String alias){
		if(conf != null){
			return conf.get(alias);
		}else{
			return null;
		}
	}
	
}
